Global address space (GAS) languages provide a shared memory programming model abstraction that can be implemented on machines that do not provide shared memory. Examples of such languages are UPC, Co-Array Fortran and Titanium. UPC extends the ANSI C language with constructs for manipulating shared memory variables, thread synchronization operations such as locks and barriers and strict and relaxed memory consistency models. The UPC language can be implemented on different architectures having shared memory, distributed memory or a combination of the two. However, existing implementations can not be scaled to operate above 64-256 threads. Therefore, a global address language that can operate on a shared or distributed memory system having more than 256 threads is needed.
UPC programs consist of virtual threads that map to physical processors in some fashion. The threads are synchronized through barriers or locks. The threads access memory in a global address space. The threads can access memory either privately or shared. Shared objects have affinity to threads. Private memory can be accessed only by the owning thread. The parallel programming model is in accordance with one of two consistency models. A strict model that obeys the sequential consistency rules and a relaxed model in which threads see changes to shared data made by other threads only at synchronization points. Furthermore, the relaxed model may only be implemented if the underlying architecture actually supports such a model.